import { Config, get } from '../components/index.js'
import { createRequire } from "module";  //引入module模块
const require = createRequire(import.meta.url);  //加载模块
const fs =require('fs')  //加载fs模块
const BotName = global.Bot.nickname;  //bot名字

//创建空对象
var Template = { "shield": [] };
var json = {}
var user = {}

export class sleepset extends plugin {  //插件主体
  constructor() {  //正则
    super({
      name: '真寻休息',
      dsc: '仿真寻休息，114514%拦截',
      event: 'message',
      priority: -114514,
      rule: [
        {
          reg: `^#?(${BotName})?休息吧$`,
          fnc: 'sleep',
        },
        {
          reg: `^#?(${BotName})?醒来$`,
          fnc: 'wakeup',
        },
        {
          reg: `^#?(${BotName})?(去哪睡了|在哪休息)$`,
          fnc: 'sleeplist',
        },
        {
          reg: `^#?(${BotName})?(咱)?(不要理|别理|无视)(.*)?(ta|TA|他|她|它)(.*)?$`,
          fnc: 'ignorefd',
        },
        {
          reg: `^#?(${BotName})?(咱)?(听)(.*)?(ta|TA|他|她|它)(.*)?(讲话|说话)(吧)?(.*)$`,
          fnc: 'ignore',
        },
        {
          reg: `^#?(${BotName})?(屏蔽列表|无视了哪些人|你无视了哪些人)$`,
          fnc: 'userlist',
        },
        {
          reg: '',
          fnc: 'asleep',
          log: false
        }
      ]
    })
  }

  //休息
  async sleep(e) {
 let set = await Config.admin_set
 let isplugin = set.sleep  //定义设置键
 if (!isplugin) return false  //插件设置开关
    if (!e.isMaster)//如果不是主人
      return e.reply("哒咩！");//发送消息
      var id = e.group_id  //创建对象
      json = await get.sleeping(id, json, false)
      if (!json[id].listen) {//如果不是生效的对象
        logger.info(`[js-box-plugin][sleep]将群[${id}]移入拦截清单`)
        json[id].listen = true;//添加到列表
        json = await get.sleeping(e.group_id, json, true)
        e.reply('那我先睡觉了...');//发送消息
      } else {//如果该群是生效的对象
        e.reply('zZZ...');//发送消息
      }
    return true;//拦截
  }

  //醒来
  async wakeup(e) {
 let set = await Config.admin_set
 let isplugin = set.sleep  //定义设置键
 if (!isplugin) return false  //插件开关设置
    if (!e.isMaster)//如果不是主人
      return e.reply("哒咩！");//发送消息
    var id = e.group_id  //创建对象
    json = await get.sleeping(id, json, false)  //引用模块
      if (!json[id].listen) {//如果该群不是生效的对象
        e.reply("我还醒着呢！");//发送消息
      } else {//如果是生效的对象
        logger.info(`[js-box-plugin][sleep]将群[${id}]移出拦截清单`)
        json[id].listen = false
        json = await get.sleeping(e.group_id, json, true)
        e.reply("呜..醒来了...");//发送消息
      }
    return true;//拦截
  }

  //群聊拦截列表
  async sleeplist(e) {
 let set = await Config.admin_set
 let isplugin = set.sleep  //定义设置键
 if (!isplugin) return false  //插件开关设置
    if (!e.isMaster) return e.reply("哒咩！");  //是否主人
    var id = e.group_id  //为当前群聊创建对象
    let sleepnum = 0  //定义初始数值
    json = await get.sleeping(id, json, false)
    let msg = `${BotName}在以下群休息...\n`
    let list = Object.keys(json)//获取群号
    for (let y of list) { //遍历所有生效的对象
    if (json[y].listen) {
    msg = msg + `${y}\n`  //拼接语句
    sleepnum++  //完成循环累积数值
        }
    }
    if (sleepnum == 0) {//如果值为0
      e.reply(`${BotName}没在任何一个群睡觉呢~`);//发送消息
    } else { //反之
      e.reply(msg);//发送组装的消息
    }
    return true;//拦截
  }

//实时监听
async asleep(e) {
 let set = await Config.admin_set
 let isplugin = set.sleep  //定义设置键
    if (e.isMaster) return false;  //是否主人
    if (!e.isGroup) return false;  //是否群聊
    var id = e.group_id  //创建对象
    var uid =e.user_id
    json = await get.sleeping(id, json, false)
    user = await get.shield(id, user, 'shield', Template, false)
    if (isplugin) {  //插件是否启用
    if (json[id].listen || (user[e.group_id].shield.indexOf(uid) !== -1))  //是否生效的群聊
      return true;//拦截
    return false;//放行
    } else {  //反之
   return false  //全部放行
     }
   }

async ignore(e) { //取消无视
    let set = await Config.admin_set
    let isplugin = set.sleep  //定义设置键
    if (!isplugin) return false  //插件开关设置
    var id = e.group_id
    user = await get.shield(id, user, 'shield', Template, false)
    let name = await get.people(e, 'nickname', e.at) //获取对象昵称
    let gender = await get.people(e, 'sex', e.at) //获取对象性别
    if (!e.isMaster)//如果不是主人
     return e.reply('哒咩！');//回复消息
     if (user[e.group_id].shield.indexOf(e.at) == -1) {//如果不在列表里
        e.reply(`咱一直都有听${gender}说话啊~`);//回复消息
      } else {//如果在列表中
        user[e.group_id].shield = user[e.group_id].shield.filter(item => item != e.at)
        await get.shield(id, user, 'shield', Template, true)
        logger.info(`[js-box-plugin][shield]将[${name}](${e.at})移出拦截清单`)
        e.reply('知道啦~');//回复消息
      }
      return
    }

async ignorefd(e) {//无视
   let set = await Config.admin_set
   let isplugin = set.sleep  //定义设置键
   if (!isplugin) return false  //插件开关设置
  var id = e.group_id
    user = await get.shield(id, user, 'shield', Template, false)
    let name = await get.people(e, 'nickname', e.at)
    if (!e.isMaster) return e.reply('哒咩！');//回复消息
      if (user[e.group_id].shield.indexOf(e.at) == -1) {//如果不在列表中
        user[e.group_id].shield.push(e.at)
        logger.info(`[js-box-plugin][shield]将[${name}](${e.at})移入拦截清单`)
        await get.shield(id, user, 'shield', Template, true)//只在群聊有效
        e.reply(`${name}！咱不会理你了！`);//回复消息
        return true;//拦截指令
      } else {//如果在列表中
        e.reply('不要再说啦~');//回复消息
      }
    return true;//拦截指令
  }

  //屏蔽人员列表
  async userlist(e) {
 let set = await Config.admin_set
 let isplugin = set.sleep  //定义设置键
 if (!isplugin) return false  //插件开关设置
    var id = e.group_id
    user = await get.shield(id, user, 'shield', Template, false)//只在群聊有效
    if (!e.isMaster) return e.reply('哒咩！');//回复消息
      if (user[e.group_id].shield.length > 0) {//如果不在列表中
        let msg = '' //组装消息
        if (user[e.group_id].shield.length > 0) {
          msg = msg + `这些是被${BotName}无视的人：`
          for (let i of user[e.group_id].shield)
            msg = msg + `\n${i}`
        }
        e.reply(msg);//回复消息
      } else {//如果在列表中
        e.reply(`没有被${BotName}无视的人哦~`);//回复消息
      }
    return true;//拦截指令
  }
}
